package other;

import pojo.Person;

/**
 * @projectName: java-sample
 * @description:
 * @author: Adam
 * @create: 2019-10-25 11:11
 **/

public class TransferDemo {

    /**
     * java 的值传递和引用传递
     */
    /*值传递：是对所传递参数进行一次副本拷贝，对参数的修改只是对副本的修改，函数调用结束，副本丢弃，原来的变量不变(即实参不变)
    引用传递：参数被传递到函数时，不复制副本，而是直接将参数自身传入到函数，函数内对参数的任何改变都将反映到原来的变量上。*/
    /*以下代码显示：基本数据类型不可以改变实参的值，字符串也不可以改变实参的值,stringBuffer可以改变实参，只有pojo对象才会改变实参的值*/

    public static void main(String[] args){

         int count = 6;

         String str1 = "这是一个直接赋值的字符串";

         String str2 = new String("这是一个new出来的字符串对象");

        StringBuffer str3 = new StringBuffer("这是一个buffer字符串");

        Person person = new Person();
        person.setName("小张");

        new TransferDemo().transferMethod(count,str1,str2,str3,person);

        System.out.println("count =============>"+count);
        System.out.println("str1================>"+str1);
        System.out.println("str2================>"+str2);
        System.out.println("str3================>"+str3);
        System.out.println("person================>"+person.getName());
    }

    public void transferMethod(int countParam, String strParam1,String strParam2,StringBuffer strb,Person personParam){
        countParam = 666;
        strParam1 = "这个直接赋值的字符串被改变了";
        strParam2 = new String("new 出来的字符串被改变了");
        strb.append(",让后我被改变了");
        personParam.setName("小张被改变了");
    }
}
